cmake_minimum_required(VERSION 3.10)
project(MyServer CXX)

# C++11 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 设置框架安装目录（统一管理路径，修改此处即可更改所有依赖路径）
set(FRAMEWORK_INSTALL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../basefw")

# 设置框架路径（解压后的install目录）
set(GameServerFramework_DIR "${FRAMEWORK_INSTALL_DIR}/lib/cmake/GameServerFramework")

# 查找 GameServerFramework
find_package(GameServerFramework REQUIRED)

# 添加框架头文件路径
include_directories(${GameServerFramework_INCLUDE_DIRS})

# muduo 库路径（从框架安装目录获取，而非系统路径）
set(MUDUO_INCLUDE_DIR "${FRAMEWORK_INSTALL_DIR}/include")
set(MUDUO_LIB_DIR "${FRAMEWORK_INSTALL_DIR}/lib")
include_directories(${MUDUO_INCLUDE_DIR})
link_directories(${MUDUO_LIB_DIR})

# 强制使用打包的 Protobuf（不使用系统的）
# 设置 Protobuf 路径为框架安装目录
set(PROTOBUF_ROOT "${FRAMEWORK_INSTALL_DIR}")
set(PROTOBUF_INCLUDE_DIRS "${PROTOBUF_ROOT}/include")
set(PROTOBUF_LIBRARIES "${PROTOBUF_ROOT}/lib/libprotobuf.a")
set(Protobuf_PROTOC_EXECUTABLE "${PROTOBUF_ROOT}/bin/protoc")

# 添加 Protobuf 头文件路径
include_directories(${PROTOBUF_INCLUDE_DIRS})

# 注意：不使用 find_package(Protobuf)，因为我们需要强制使用打包的版本
# find_package(Protobuf REQUIRED)  # 已禁用

# 使用预生成的 Protobuf 文件（位于 pbmsg/src/ 目录）
# 注意：需要先运行 pbmsg/generate_proto.sh 生成协议文件
# 递归查找所有子目录中的 .pb.cc 文件，支持任意层级的子目录结构
file(GLOB_RECURSE PROTO_SRCS "${CMAKE_SOURCE_DIR}/pbmsg/src/*.pb.cc")

# 添加项目根目录到包含路径（支持 #include "pbmsg/src/xxx.pb.h"）
include_directories(${CMAKE_SOURCE_DIR})
# 添加 pbmsg/src 到包含路径（支持 #include "test/test_msg.pb.h"）
include_directories(${CMAKE_SOURCE_DIR}/pbmsg/src)

# 创建可执行文件
add_executable(my_server
    my_server.cpp
    ${PROTO_SRCS}
)

# 链接框架库
target_link_libraries(my_server
    GameServerFramework::server_framework
    GameServerFramework::network
    GameServerFramework::protocol
    GameServerFramework::common
    muduo_net
    muduo_base
    ${PROTOBUF_LIBRARIES}
    pthread
    stdc++
    rt
)

# 打印信息
message(STATUS "========================================")
message(STATUS "  My Server Configuration")
message(STATUS "========================================")
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
message(STATUS "GameServerFramework found: ${GameServerFramework_DIR}")
message(STATUS "Protobuf root: ${PROTOBUF_ROOT}")
message(STATUS "Protobuf libraries: ${PROTOBUF_LIBRARIES}")
message(STATUS "Protobuf protoc: ${Protobuf_PROTOC_EXECUTABLE}")
message(STATUS "========================================")

